;(function(){
	var 
		 isNodeJS	= (typeof process != 'undefined') && !!(process && process.version)
		,isASP		= !!this.ASP;
	
	if($$.Server.isNodeJS){
		
		$$.Server.mappath = function(){};
		$$.log	= console.log;
		// @todo set a file for Application
		
	}if($$.Server.isASP){
		
		$$.Server.mappath = function(){
			return Application.mappath(arguments[0]);
		}
	}	
	
	/**
	 * 获取来自表单的各个字段的数据。HTTP FORM所提交的数据乃是key/value配对的结构。
	 * 本函数是把这些key/value集合转化成为JavaScript对象。这是post包最核心的函数。
	 * 对各个字段有decodeURI()、unescape()、getPerm()自动类型转化的功能。
	 * @param {Boolean/String} isAllRequest true表示为返回QueryString和Form的Request对象集合。
	 * 如果指定form则返回表单的hash值，如果指定QueryString则返回URL上面的参数hash。
	 * @param {Boolean} isAutoType 是否进行自动类型转换。
	 * @return {Object} 客户端提交的数据或查询参数。
	 */
	function emuRequest(isAutoType, emuableObj){
	    var 
	         key
	        ,e
	        ,v
	        ,queryObj = {
	        	_count : 0
	        }
	        ,i = 0;
	        
		/**
		 * 输入参数，还原它的primitive值。
		 * @param 	{Any} v
		 * @return 	{Any}
		 */
		function getPerm(v){
			if(v){
				if(v == 'true' ) return true;
				if(v == 'false') return false;
				if(v.toString() == (new Date(v)).toString()) return new Date(v);
		      	if(v == Number(v)) return Number(v);
			}
		  	return v;
		}

	    if(!emuableObj)return queryObj;
	    if(emuableObj && emuableObj.count <= 0)return queryObj;
	        
	    for(e = new Enumerator(emuableObj); !e.atEnd(); e.moveNext()){
	        key = e.item().toString();
	        v   = emuableObj(key)(); // MS ASP这里好奇怪，不加()不能返回字符串
	        
//	        	v 	= decodeURI(v);
//	            v 	= unescape(v);
	        queryObj[key] = isAutoType ? getPerm(v) : v;
	        i++;
	    }
	    
	    queryObj._count = i; // 字段总数
	    return queryObj;
	}
	
	$$.server.Server = {
		 getRequest_QueryString	: emuRequest.delegate(null, Request.QueryString)
		,getRequest_Form		: emuRequest.delegate(null, Request.Form)
		,getAll_Request			: emuRequest.map([Request.QueryString, Request.Form, Request.Cookie]).C(function(){
			var allRequest = {
				_count: 0
			};
			var _args = [];
			for(var i = 0, j = arguments.length; i < j; i++){
				_args[i] = arguments[i]; // 修正arguments关键字不是数组的补丁函数。
			}
			var obj;
			for(var i = 0, j = _args.length; i < j; i++){
				obj = _args[i];
				if(obj._count > 0){
					var count = allRequest._count + obj._count;
					for(var i in obj){
						allRequest[i] = obj[i];
					}
					allRequest._count = count;
				}
			}
			
			return allRequest;
		})
	};
	// make them as list.
	var _server = $$.server.Server;
	_server.getRequest_Form_toList			= _server.getRequest_Form.C($$.toArray);
	_server.getRequest_QueryString_toList	= _server.getRequest_QueryString.C($$.toArray);
	_server.getAll_Request_toList			= _server.getAll_Request.C($$.toArray);
})();